-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for OSX #96
base: main
Are you sure you want to change the base?
Conversation
d9d1541
to
4df5a27
Compare
Signed-off-by: Christian Belloni <christianbelloni@Christians-Laptop.local>
Signed-off-by: Christian Belloni <christianbelloni@Christians-Laptop.local>
Signed-off-by: Christian Belloni <christianbelloni@Christians-Laptop.local>
e71579c
to
8f6f737
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The changes to scripts look good, but the changes to Rust code seem redundant.
bindgen/src/gen_cs/mod.rs
Outdated
@@ -74,10 +74,25 @@ impl Config { | |||
} | |||
|
|||
pub fn cdylib_name(&self) -> String { | |||
self.cdylib_name | |||
#[cfg(target_os = "macos")] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks like the branches are identical?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The only change is on the macos branch, i thought macos, windows and linux may be treated differently in the future so i kept three branches. if you think that that's not necessary i can remove the windows branch
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oops, I'm blind. I think it would be better to write the code in some different way, to avoid these copy-pasted lines. It's kinda difficult to see what's the difference, but I think it's like that just in diff. When I looked at the changes without diff, it was more clear.
This branching makes the generated bindings dependent on the environment they are generated, i.e. you can't use Mac to generate bindings that will work on Windows. Are you sure that's the desired behaviour for your use case?
I tried to run the tests locally and it's working without .dylib
suffix. Can you test again without .dylib
suffix?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When I first tested it the loading failed complaining that the shared lib couldn't be found, it's been a minute since I did any interop in c# so I assumed it didn't handle extensions, as soon as I can I'll test it again and see if it works.
In case the lib still cannot be found would you be open to #if-ing the dllimport declarations to support platform specific extensions?
Something like
<PropertyGroup>
<IsWindows Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' == 'true'">true</IsWindows>
<IsOSX Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' == 'true'">true</IsOSX>
</PropertyGroup>
<PropertyGroup Condition="'$(IsWindows)'=='true'">
<DefineConstants>Windows</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(IsOSX)'=='true'">
<DefineConstants>OSX</DefineConstants>
</PropertyGroup>
#if OSX
[DllImport("lib.dylib")]
#else
[DllImport("lib")]
#endif
public static extern void myFunc();
Obviously I'd add Linux too, I'm keeping it short here.
I'm writing on my phone so if it's messed up I'll fix the formatting in the morning.
Thank you for taking the time to review this 😊
Signed-off-by: Christian Belloni <christianbelloni@Christians-Laptop.local>
Hi, this is a naive implementation to support osx, for what i can see on every other platform everything should stay the same and all tests now pass, let me know if there's something else i should do